from multiprocessing import Process, Semaphore
from time import sleep
import os


def handle(sem):
    print('%d 想执行时间' % os.getpid())
    # 想执行必须获取信号量
    sem.acquire()
    print('%d 开始执行操作' % os.getpid())
    sleep(3)
    print('%d 完成操作' % os.getpid())
    # 增加信号量
    sem.release()


if __name__ == "__main__":
    # 创建信号量
    # 服务程序最多允许3个进程同时执行事件
    sem = Semaphore(3)
    jobs = []
    for i in range(5):
        p = Process(target=handle, args=(sem,))
        jobs.append(p)
        p.start()
    for i in jobs:
        i.join()

    # 获取信号量值
    print(sem.get_value())
